/*
 * Bigrama.cpp
 *
 *  Created on: 27/11/2014
 *      Author: nico
 */

#include "Bigrama.hpp"

Bigrama::Bigrama(){

}

Bigrama::Bigrama(string clave) {
	this->clave = clave;
}

Bigrama::Bigrama (const Bigrama& bigrama){
	this->clave = bigrama.clave;
}

Bigrama::~Bigrama() {
	map <string,Unigrama*>::iterator iterador;
	for (iterador = this->terminos.begin() ; iterador != this->terminos.end(); iterador++){
		delete (*iterador).second;
	}
}

string Bigrama::getClave(){
	return this->clave;
}

bool Bigrama::existeTermino(string termino){
	if ( this->terminos.find(termino) == this->terminos.end()  ){
		return false;
	}
	return true;
}

void Bigrama::agregarTermino(string termino){
	Unigrama* pUnigrama = new Unigrama (termino);
	this->terminos.insert(pair <string,Unigrama*> (termino,pUnigrama));
}

void Bigrama::agregarTermino(Unigrama* unigrama){
	Unigrama* p = new Unigrama (*unigrama);
	this->terminos.insert( pair <string, Unigrama*> (p->getTermino(), p));
}

void Bigrama::incOcurrencias(string* termino){
	this->terminos[*termino]->inc();
}

Ocurrencias Bigrama::getOcurrencias(string* termino){
	return this->terminos[*termino]->getOcurrencias();
}

void Bigrama::sumarOcurrencias(string termino, Ocurrencias ocurrencias){
	this->terminos[termino]->sumarOcurrencias(ocurrencias);
}

Ocurrencias Bigrama::getSumatoriaBigramas(){
	map<string,Unigrama*>::iterator it;
	Ocurrencias total = 0;
	for (it = this->terminos.begin(); it != this->terminos.end(); it++){
		total = total + it->second->getOcurrencias();
	}
	return total;
}

int Bigrama::getCantTerminosDistintos(){
	return this->terminos.size();
}

Probabilidad Bigrama::getProbabilidad (string* termino){
	return this->terminos[*termino]->getProbabilidad();
}

map <string,Unigrama*>:: iterator Bigrama::getIteradorTerminos(){
	return this->terminos.begin();
}

map <string,Unigrama*>:: iterator Bigrama::ultimoTermino(){
	return this->terminos.end();
}
bool operator< (const Bigrama& u1, const Bigrama& u2){
	return (u1.clave.compare(u2.clave));
}


